import { IPSModelObject } from '../ipsmodel-object';
import { IPSAppDataEntity } from '../app/dataentity/ipsapp-data-entity';
import { IPSControlAction } from './ipscontrol-action';
import { IPSControlAttribute } from './ipscontrol-attribute';
import { IPSControlHandler } from './ipscontrol-handler';
import { IPSControlLogic } from './ipscontrol-logic';
import { IPSControlParam } from './ipscontrol-param';
import { IPSControlRender } from './ipscontrol-render';
import { IPSCtrlMsg } from '../res/ipsctrl-msg';
import { IPSSysCss } from '../res/ipssys-css';
import { IPSSysPFPlugin } from '../res/ipssys-pfplugin';

/**
 *
 * 子接口类型识别属性[controlType]
 * @export
 * @interface IPSControl
 */
export interface IPSControl extends IPSModelObject {
  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 部件样式
   * @type {string}
   */
  controlStyle: string;

  /**
   * 部件类型
   * @description 值模式 [云平台部件类型] {TOOLBAR：工具栏、 GRID：数据表格、 FORM：编辑表单、 SEARCHFORM：搜索表单、 DRBAR：数据关系栏、 VIEWPANEL：单视图面板、 PICKUPVIEWPANEL：选择视图面板、 DATAVIEW：数据视图、 TREEGRID：数据树表格、 WFEXPBAR：流程导航栏、 TREEVIEW：树视图、 TREEEXPBAR：树视图导航栏、 TABVIEWPANEL：分页视图面板、 DRTAB：数据关系分页部件、 CHART：数据图表、 REPORTPANEL：报表面板、 LIST：列表、 MOBMDCTRL：移动端多数据视图、 MULTIEDITVIEWPANEL：多编辑视图面板、 WIZARDPANEL：向导面板、 UPDATEPANEL：更新面板、 SEARCHBAR：搜索栏、 DASHBOARD：数据看板、 CALENDAR：日历部件、 PANEL：面板部件、 MAP：地图部件、 GANTT：甘特部件、 TREEGRIDEX：树表格（增强）、 KANBAN：看板、 CALENDAREXPBAR：日历视图导航栏、 CHARTEXPBAR：图表视图导航栏、 DATAVIEWEXPBAR：卡片视图导航栏、 GANTTEXPBAR：甘特视图导航栏、 GRIDEXPBAR：表格视图导航栏、 LISTEXPBAR：列表视图导航栏、 MAPEXPBAR：地图视图导航栏、 STATEWIZARDPANEL：状态向导面板、 APPMENU：应用菜单、 TABEXPPANEL：分页导航面板、 CUSTOM：自定义部件 }
   * @type {( string | 'TOOLBAR' | 'GRID' | 'FORM' | 'SEARCHFORM' | 'DRBAR' | 'VIEWPANEL' | 'PICKUPVIEWPANEL' | 'DATAVIEW' | 'TREEGRID' | 'WFEXPBAR' | 'TREEVIEW' | 'TREEEXPBAR' | 'TABVIEWPANEL' | 'DRTAB' | 'CHART' | 'REPORTPANEL' | 'LIST' | 'MOBMDCTRL' | 'MULTIEDITVIEWPANEL' | 'WIZARDPANEL' | 'UPDATEPANEL' | 'SEARCHBAR' | 'DASHBOARD' | 'CALENDAR' | 'PANEL' | 'MAP' | 'GANTT' | 'TREEGRIDEX' | 'KANBAN' | 'CALENDAREXPBAR' | 'CHARTEXPBAR' | 'DATAVIEWEXPBAR' | 'GANTTEXPBAR' | 'GRIDEXPBAR' | 'LISTEXPBAR' | 'MAPEXPBAR' | 'STATEWIZARDPANEL' | 'APPMENU' | 'TABEXPPANEL' | 'CUSTOM')}
   */
  controlType:
    | string
    | 'TOOLBAR'
    | 'GRID'
    | 'FORM'
    | 'SEARCHFORM'
    | 'DRBAR'
    | 'VIEWPANEL'
    | 'PICKUPVIEWPANEL'
    | 'DATAVIEW'
    | 'TREEGRID'
    | 'WFEXPBAR'
    | 'TREEVIEW'
    | 'TREEEXPBAR'
    | 'TABVIEWPANEL'
    | 'DRTAB'
    | 'CHART'
    | 'REPORTPANEL'
    | 'LIST'
    | 'MOBMDCTRL'
    | 'MULTIEDITVIEWPANEL'
    | 'WIZARDPANEL'
    | 'UPDATEPANEL'
    | 'SEARCHBAR'
    | 'DASHBOARD'
    | 'CALENDAR'
    | 'PANEL'
    | 'MAP'
    | 'GANTT'
    | 'TREEGRIDEX'
    | 'KANBAN'
    | 'CALENDAREXPBAR'
    | 'CHARTEXPBAR'
    | 'DATAVIEWEXPBAR'
    | 'GANTTEXPBAR'
    | 'GRIDEXPBAR'
    | 'LISTEXPBAR'
    | 'MAPEXPBAR'
    | 'STATEWIZARDPANEL'
    | 'APPMENU'
    | 'TABEXPPANEL'
    | 'CUSTOM';

  /**
   * 控件高度
   * @type {number}
   * @default 0.0
   */
  height: number;

  getHookEventNames(): string[] | null;

  get hookEventNames(): string[] | null;

  /**
   * 部件逻辑名称
   * @type {string}
   */
  logicName: string;

  /**
   * 应用实体
   *
   * @type {IPSAppDataEntity}
   */
  getPSAppDataEntity(): IPSAppDataEntity | null;

  /**
   * 应用实体
   *
   * @type {IPSAppDataEntity}
   */
  get psAppDataEntity(): IPSAppDataEntity | null;

  /**
   * 应用实体（必须存在）
   *
   * @type {IPSAppDataEntity}
   */
  getPSAppDataEntityMust(): IPSAppDataEntity;

  /**
   * 部件注入属性集合
   *
   * @type {IPSControlAttribute[]}
   */
  getPSControlAttributes(): IPSControlAttribute[] | null;

  /**
   * 部件注入属性集合
   *
   * @type {IPSControlAttribute[]}
   */
  get psControlAttributes(): IPSControlAttribute[] | null;

  findPSControlAttribute(objKey: any): IPSControlAttribute | null;

  /**
   * 部件处理
   *
   * @type {IPSControlHandler}
   */
  getPSControlHandler(): IPSControlHandler | null;

  /**
   * 部件处理
   *
   * @type {IPSControlHandler}
   */
  get psControlHandler(): IPSControlHandler | null;

  /**
   * 部件处理（必须存在）
   *
   * @type {IPSControlHandler}
   */
  getPSControlHandlerMust(): IPSControlHandler;

  /**
   * 部件逻辑集合
   *
   * @type {IPSControlLogic[]}
   */
  getPSControlLogics(): IPSControlLogic[] | null;

  /**
   * 部件逻辑集合
   *
   * @type {IPSControlLogic[]}
   */
  get psControlLogics(): IPSControlLogic[] | null;

  findPSControlLogic(objKey: any): IPSControlLogic | null;

  /**
   * 部件参数
   *
   * @type {IPSControlParam}
   */
  getPSControlParam(): IPSControlParam | null;

  /**
   * 部件参数
   *
   * @type {IPSControlParam}
   */
  get psControlParam(): IPSControlParam | null;

  /**
   * 部件参数（必须存在）
   *
   * @type {IPSControlParam}
   */
  getPSControlParamMust(): IPSControlParam;

  /**
   * 部件绘制器集合
   *
   * @type {IPSControlRender[]}
   */
  getPSControlRenders(): IPSControlRender[] | null;

  /**
   * 部件绘制器集合
   *
   * @type {IPSControlRender[]}
   */
  get psControlRenders(): IPSControlRender[] | null;

  findPSControlRender(objKey: any): IPSControlRender | null;

  /**
   * 部件消息
   *
   * @type {IPSCtrlMsg}
   */
  getPSCtrlMsg(): IPSCtrlMsg | null;

  /**
   * 部件消息
   *
   * @type {IPSCtrlMsg}
   */
  get psCtrlMsg(): IPSCtrlMsg | null;

  /**
   * 部件消息（必须存在）
   *
   * @type {IPSCtrlMsg}
   */
  getPSCtrlMsgMust(): IPSCtrlMsg;

  /**
   * 界面样式
   *
   * @type {IPSSysCss}
   */
  getPSSysCss(): IPSSysCss | null;

  /**
   * 界面样式
   *
   * @type {IPSSysCss}
   */
  get psSysCss(): IPSSysCss | null;

  /**
   * 界面样式（必须存在）
   *
   * @type {IPSSysCss}
   */
  getPSSysCssMust(): IPSSysCss;

  /**
   * 前端扩展插件
   *
   * @type {IPSSysPFPlugin}
   */
  getPSSysPFPlugin(): IPSSysPFPlugin | null;

  /**
   * 前端扩展插件
   *
   * @type {IPSSysPFPlugin}
   */
  get psSysPFPlugin(): IPSSysPFPlugin | null;

  /**
   * 前端扩展插件（必须存在）
   *
   * @type {IPSSysPFPlugin}
   */
  getPSSysPFPluginMust(): IPSSysPFPlugin;

  /**
   * 用户自定义行为2
   *
   * @type {IPSControlAction}
   */
  getUser2PSControlAction(): IPSControlAction | null;

  /**
   * 用户自定义行为2
   *
   * @type {IPSControlAction}
   */
  get user2PSControlAction(): IPSControlAction | null;

  /**
   * 用户自定义行为2（必须存在）
   *
   * @type {IPSControlAction}
   */
  getUser2PSControlActionMust(): IPSControlAction;

  /**
   * 用户自定义行为
   *
   * @type {IPSControlAction}
   */
  getUserPSControlAction(): IPSControlAction | null;

  /**
   * 用户自定义行为
   *
   * @type {IPSControlAction}
   */
  get userPSControlAction(): IPSControlAction | null;

  /**
   * 用户自定义行为（必须存在）
   *
   * @type {IPSControlAction}
   */
  getUserPSControlActionMust(): IPSControlAction;

  /**
   * 控件宽度
   * @type {number}
   * @default 0.0
   */
  width: number;
}
